#include <iostream>
#include <fcntl.h>
#include <cstring>
#include <unistd.h>
void SetNoBlock(int fd) 
{ 
    int fl = fcntl(fd, F_GETFL); 
    if (fl < 0) 
    { 
        std::cerr << "fcntl:" << strerror(errno) << std::endl;
        return; 
    }
    fcntl(fd, F_SETFL, fl | O_NONBLOCK); 
}
int main()
{
    SetNoBlock(0);
    char buffer[1024];
    while(1)
    {
        ssize_t s = read(0, buffer, sizeof(buffer)-1);
        if (s > 0)
        {
            //正常读取
        }
        else if (s == 0)
        {

        }
        else
        {
            if (errno == EAGAIN || errno == EWOULDBLOCK)
            {
                continue;//表示数据未就绪，并不代表IO出错
            }
            else if (errno == EINTR)
            {
                continue;//表示数据未就绪，并不代表IO出错
            }
            else
            {
                break;//读取出错
            }
        }
    }
}
